home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1320 / 1320.xpi / chrome / gmanager.jar / content / options / options.js < prev    next >
Text File  |  2010-01-22  |  13KB  |  383 lines

  1. // Gmail Manager
  2. // By Todd Long <longfocus@gmail.com>
  3. // http://www.longfocus.com/firefox/gmanager/
  4.  
  5. var gmanager_Options = new function()
  6. {
  7.   this.__proto__ = new gmanager_BundlePrefix("gmanager-options-");
  8.   
  9.   this.FILTER_TYPE_XML = "*.xml";
  10.   
  11.   this.load = function()
  12.   {
  13.     // Load the accounts manager sandbox
  14.     this._manager = Components.classes["@longfocus.com/gmanager/manager;1"].getService(Components.interfaces.gmIManager);
  15.     this._sandbox = Components.classes["@longfocus.com/gmanager/manager;1"].createInstance(Components.interfaces.gmIManager);
  16.     
  17.     var accounts = this._sandbox.getAccounts({});
  18.     
  19.     for (var i = 0; i < accounts.length; i++)
  20.       accounts[i].node.setAttribute("password", accounts[i].password);
  21.     
  22.     // Get the last viewed page
  23.     var pageValue = gmanager_Prefs.getCharPref("options-page");
  24.     
  25.     // Check if the debug page is visible
  26.     if (!gmanager_Prefs.getBoolPref("debug"))
  27.     {
  28.       // Remove the debug page from the list of pages
  29.       var debugPage = document.getElementById("gmanager-options-listbox").lastChild;
  30.       debugPage.parentNode.removeChild(debugPage);
  31.     }
  32.     
  33.     // Load the page
  34.     this.loadPage(pageValue);
  35.   }
  36.   
  37.   this.command = function()
  38.   {
  39.     var pageIndex = document.getElementById("gmanager-options-listbox").selectedIndex;
  40.     var pageDocument = document.getElementById("gmanager-options-iframe").contentDocument;
  41.     
  42.     switch (pageIndex)
  43.     {
  44.       case 0: // general.xul
  45.         break;
  46.       case 1: // accounts.xul
  47.       {
  48.         var accountItem = pageDocument.getElementById("gmanager-options-accounts-listbox").selectedItem;
  49.         
  50.         if (accountItem)
  51.         {
  52.           var account = this._sandbox.getAccount(accountItem.email);
  53.           if (account)
  54.             account.setBoolPref("general-auto-login", accountItem.checked);
  55.         }
  56.         
  57.         break;
  58.       }
  59.       case 2: // compose.xul
  60.       {
  61.         var isMailtoDisabled = !pageDocument.getElementById("gm-prefs-compose-mailto-links").checked;
  62.         
  63.         pageDocument.getElementById("options-compose-default-account").disabled = isMailtoDisabled;
  64.         pageDocument.getElementById("gm-prefs-compose-mailto-default").parentNode.disabled = isMailtoDisabled;
  65.         
  66.         break;
  67.       }
  68.       case 3: // security.xul
  69.         break;
  70.       case 4: // toolbar.xul
  71.         break;
  72.       case 5: // help.xul
  73.       {
  74.         var contributorItem = pageDocument.getElementById("gmanager-options-help-contributors-list").selectedItem;
  75.         
  76.         if (contributorItem)
  77.           pageDocument.getElementById("gmanager-options-help-visit-button").disabled = !contributorItem.hasAttribute("site");
  78.         
  79.         break;
  80.       }
  81.       case 6: // debug.xul
  82.       {
  83.         break;
  84.       }
  85.       default:
  86.         break;
  87.     }
  88.   }
  89.   
  90.   this.loadPage = function(aPageValue)
  91.   {
  92.     var pagesList = document.getElementById("gmanager-options-listbox");
  93.     var pageFrame = document.getElementById("gmanager-options-iframe");
  94.     
  95.     // Set the page value
  96.     pagesList.value = aPageValue;
  97.     
  98.     // Check if the page is valid
  99.     if (!pagesList.selectedItem)
  100.       pagesList.selectedItem = pagesList.firstChild;
  101.     
  102.     // Save the page as last viewed
  103.     gmanager_Prefs.setCharPref("options-page", pagesList.value);
  104.     
  105.     // Save the page preferences
  106.     gmanager_Prefs.savePrefs(this._sandbox.global.node, pageFrame.contentDocument);
  107.     
  108.     // Display the page
  109.     pageFrame.setAttribute("src", pagesList.value);
  110.   }
  111.   
  112.   this.loadPagePrefs = function()
  113.   {
  114.     var pageIndex = document.getElementById("gmanager-options-listbox").selectedIndex;
  115.     var pageDocument = document.getElementById("gmanager-options-iframe").contentDocument;
  116.     
  117.     switch (pageIndex)
  118.     {
  119.       case 0: // general.xul
  120.         break;
  121.       case 1: // accounts.xul
  122.       {
  123.         var accountsList = pageDocument.getElementById("gmanager-options-accounts-listbox");
  124.         var accounts = this._sandbox.getAccounts({});
  125.         
  126.         // Make sure the list of accounts is empty
  127.         while (accountsList.getRowCount() > 0)
  128.           accountsList.removeItemAt(0);
  129.         
  130.         for (var i = 0; i < accounts.length; i++)
  131.         {
  132.           var accountSandbox = accounts[i];
  133.           var accountReal = this._manager.getAccount(accountSandbox.email);
  134.           var accountItem = pageDocument.createElement("listitem");
  135.           
  136.           accountItem.setAttribute("email", accountSandbox.email);
  137.           accountItem.setAttribute("checked", accountSandbox.getBoolPref("general-auto-login"));
  138.           accountItem.setAttribute("icontype", accountSandbox.type);
  139.           accountItem.setAttribute("status", gmanager_Utils.toStyleStatus(accountReal ? accountReal.status : accountSandbox.status));
  140.           accountItem.setAttribute("newMail", (accountReal ? accountReal.unread > 0 : false));
  141.           
  142.           accountsList.appendChild(accountItem);
  143.         }
  144.         
  145.         break;
  146.       }
  147.       case 2: // compose.xul
  148.       {
  149.         // Populate the accounts
  150.         this._populateAccounts(pageDocument.getElementById("gm-prefs-compose-mailto-default"));
  151.         
  152.         break;
  153.       }
  154.       case 3: // security.xul
  155.         break;
  156.       case 4: // toolbar.xul
  157.         break;
  158.       case 5: // help.xul
  159.       {
  160.         var contributorsPopup = pageDocument.getElementById("gmanager-options-help-contributors-popup");
  161.         var randomIndex = Math.floor(Math.random() * contributorsPopup.childNodes.length);
  162.         
  163.         // Select the random contributor
  164.         contributorsPopup.parentNode.selectedIndex = randomIndex;
  165.         
  166.         break;
  167.       }
  168.       case 6: // debug.xul
  169.       {
  170.         var accountsPopup = pageDocument.getElementById("gmanager-options-debug-accounts-popup");
  171.         var accounts = this._sandbox.getAccounts({});
  172.         
  173.         // Populate the accounts
  174.         this._populateAccounts(accountsPopup);
  175.         
  176.         if (accounts && accounts.length > 0)
  177.         {
  178.           var menuSeparator = document.createElement("menuseparator");
  179.           accountsPopup.insertBefore(menuSeparator, accountsPopup.firstChild);
  180.           
  181.           var menuItem = document.createElement("menuitem");
  182.           menuItem.setAttribute("label", "<No account selected>");
  183.           accountsPopup.insertBefore(menuItem, accountsPopup.firstChild);
  184.         }
  185.         
  186.         break;
  187.       }
  188.       default:
  189.         break;
  190.     }
  191.     
  192.     // Load the page preferences
  193.     gmanager_Prefs.loadPrefs(this._sandbox.global.node, pageDocument);
  194.     
  195.     // Update the page preferences
  196.     this.command();
  197.   }
  198.   
  199.   this._populateAccounts = function(aPopup)
  200.   {
  201.     // Check if the popup is specified
  202.     if (aPopup)
  203.     {
  204.       var accounts = this._sandbox.getAccounts({});
  205.       
  206.       // Clear the menu items
  207.       gmanager_Utils.clearKids(aPopup);
  208.       
  209.       if (accounts && accounts.length > 0)
  210.       {
  211.         for (var i = 0; i < accounts.length; i++)
  212.         {
  213.           // Create the email menu item
  214.           var emailItem = document.createElement("menuitem");
  215.           emailItem.setAttribute("label", accounts[i].email);
  216.           emailItem.setAttribute("value", accounts[i].email);
  217.           aPopup.appendChild(emailItem);
  218.         }
  219.       }
  220.       else
  221.       {
  222.         var emailItem = document.createElement("menuitem");
  223.         emailItem.setAttribute("label", this.getString("no-accounts"));
  224.         aPopup.appendChild(emailItem);
  225.       }
  226.       
  227.       // Select the first menu item
  228.       aPopup.parentNode.selectedItem = aPopup.firstChild;
  229.     }
  230.   }
  231.   
  232.   this.importPrefs = function()
  233.   {
  234.     var file = this._selectFile("import");
  235.     if (file)
  236.     {
  237.       if (this._sandbox.importPrefs(file))
  238.       {
  239.         // Update the page preferences
  240.         this.loadPagePrefs();
  241.         
  242.         alert(this.getString("import-success"));
  243.       }
  244.       else
  245.         alert(this.getString("import-error"));
  246.     }
  247.   }
  248.   
  249.   this.exportPrefs = function()
  250.   {
  251.     var file = this._selectFile("export");
  252.     if (file)
  253.     {
  254.       var success = this._sandbox.exportPrefs(file);
  255.       
  256.       if (success)
  257.         alert(this.getString("export-success"));
  258.     }
  259.   }
  260.   
  261.   this._selectFile = function(aMode)
  262.   {
  263.     var nsIFilePicker = Components.interfaces.nsIFilePicker;
  264.     var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
  265.     
  266.     switch (aMode)
  267.     {
  268.       case "export":
  269.         filePicker.init(window, this.getString("export"), nsIFilePicker.modeSave);
  270.         break;
  271.       case "import":
  272.         filePicker.init(window, this.getString("import"), nsIFilePicker.modeOpen);
  273.         break;
  274.     }
  275.     
  276.     filePicker.appendFilter(this.getFString("xml-files", [this.FILTER_TYPE_XML]), this.FILTER_TYPE_XML);
  277.     filePicker.show();
  278.     
  279.     return filePicker.file;
  280.   }
  281.   
  282.   this.selectAccount = function()
  283.   {
  284.     var pageDocument = document.getElementById("gmanager-options-iframe").contentDocument;
  285.     var accountsList = pageDocument.getElementById("gmanager-options-accounts-listbox");
  286.     
  287.     pageDocument.getElementById("gmanager-options-accounts-move-up-button").disabled = (accountsList.selectedIndex == 0)
  288.     pageDocument.getElementById("gmanager-options-accounts-move-down-button").disabled = (accountsList.selectedIndex == (accountsList.getRowCount() - 1));
  289.     pageDocument.getElementById("gmanager-options-accounts-modify-button").disabled = (accountsList.selectedCount == 0);
  290.     pageDocument.getElementById("gmanager-options-accounts-remove-button").disabled = (accountsList.selectedCount == 0);
  291.   }
  292.   
  293.   this.accountsAdd = function()
  294.   {
  295.     window.openDialog("chrome://gmanager/content/options/dialogs/account.xul", "account", "centerscreen,chrome,modal", this._sandbox);
  296.     
  297.     this.loadPagePrefs();
  298.   }
  299.   
  300.   this.accountsModify = function()
  301.   {
  302.     var pageDocument = document.getElementById("gmanager-options-iframe").contentDocument;
  303.     var accountItem = pageDocument.getElementById("gmanager-options-accounts-listbox").selectedItem;
  304.     
  305.     if (accountItem)
  306.     {
  307.       window.openDialog("chrome://gmanager/content/options/dialogs/account.xul", "account", "centerscreen,chrome,modal", this._sandbox, accountItem.email);
  308.       
  309.       this.loadPagePrefs();
  310.     }
  311.   }
  312.   
  313.   this.accountsRemove = function()
  314.   {
  315.     var pageDocument = document.getElementById("gmanager-options-iframe").contentDocument;
  316.     var accountItem = pageDocument.getElementById("gmanager-options-accounts-listbox").selectedItem;
  317.     
  318.     if (accountItem)
  319.     {
  320.       var email = accountItem.email;
  321.       
  322.       if (confirm(this.getFString("remove-account", [email])))
  323.       {
  324.         // Remove the account
  325.         this._sandbox.removeAccount(email);
  326.         
  327.         // Remove the account from the list
  328.         accountItem.parentNode.removeChild(accountItem);
  329.       }
  330.     }
  331.   }
  332.   
  333.   this.helpVisitSite = function()
  334.   {
  335.     var pageDocument = document.getElementById("gmanager-options-iframe").contentDocument;
  336.     var contributorItem = pageDocument.getElementById("gmanager-options-help-contributors-list").selectedItem;
  337.     
  338.     if (contributorItem && contributorItem.hasAttribute("site"))
  339.       gmanager_Utils.loadSimpleURI(contributorItem.getAttribute("site"));
  340.   }
  341.   
  342.   this.debugMigrate = function()
  343.   {
  344.     var passwords = gmanager_Utils.getStoredPasswords();
  345.     window.openDialog("chrome://gmanager/content/migrate/migrate.xul", "migrate", "centerscreen,chrome,modal,resizable", passwords);
  346.   }
  347.   
  348.   this.debugLogin = function()
  349.   {
  350.     var pageDocument = document.getElementById("gmanager-options-iframe").contentDocument;
  351.     var loginItem = pageDocument.getElementById("gmanager-options-debug-accounts-popup").parentNode.selectedItem;
  352.     var account = this._manager.getAccount(loginItem.label);
  353.     window.openDialog("chrome://gmanager/content/login/login.xul", "gmanager-login", "centerscreen,chrome,dependent=no", account);
  354.   }
  355.   
  356.   this.debugAlert = function()
  357.   {
  358.     var pageDocument = document.getElementById("gmanager-options-iframe").contentDocument;
  359.     var alertItem = pageDocument.getElementById("gmanager-options-debug-accounts-popup").parentNode.selectedItem;
  360.     var account = this._manager.getAccount(alertItem.label);
  361.     window.openDialog("chrome://gmanager/content/alert/alert.xul", "gmanager-alert", "chrome,dialog=yes,popup=yes,titlebar=no", account);
  362.   }
  363.   
  364.   this.dialogAccept = function()
  365.   {
  366.     // Save the page preferences
  367.     var pageDocument = document.getElementById("gmanager-options-iframe").contentDocument;
  368.     gmanager_Prefs.savePrefs(this._sandbox.global.node, pageDocument);
  369.     
  370.     // Save the preferences
  371.     this._sandbox.save();
  372.     
  373.     // Load the preferences
  374.     this._manager.load();
  375.     
  376.     // Notify observers that the preferences have changed
  377.     var observer = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
  378.     observer.notifyObservers(null, "gmanager-prefs-notify-changed", null);
  379.     
  380.     // Close the window
  381.     return true;
  382.   }
  383. }